// 监听来自主线程的消息
onmessage = function (event) {
    // 获取从主线程传递过来的数据
    let data = event.data;
    let i = data.index; // 获取索引
    let randomNumbersArray = data.randomNumbers; // 获取随机数数组
    let randomNumber = data.randomNumber; // 获取随机数数组
    const smoothingWindow = 5; // 平滑窗口大小

    // 自定义映射函数，将值从一个范围映射到另一个范围
    function map(value, start1, stop1, start2, stop2) {
        return start2 + (stop2 - start2) * ((value - start1) / (stop1 - start1));
    }

    // 应用移动平均滤波器的函数
    function applyMovingAverageFilter(data, windowSize) {
        let result = [];
        for (let i = 0; i < data.length; i++) {
            let sum = 0;
            let count = 0;
            // 在窗口内进行求和
            for (let j = i; j >= 0 && j > i - windowSize; j--) {
                sum += data[j];
                count++;
            }
            // 计算平均值并添加到结果数组中
            result.push(sum / count);
        }
        return result; // 返回平滑后的数据数组
    }



    // 对随机数数组应用平滑滤波
    smoothedNumbersArray = applyMovingAverageFilter(randomNumbersArray, smoothingWindow);

    // 计算平滑数组的最小值和最大值
    let minValue = Math.min(...smoothedNumbersArray);
    let maxValue = Math.max(...smoothedNumbersArray);
    let randomFactor = Math.random(); // 生成一个随机数
    let randomFactor1 = Math.random(); // 生成一个随机数
    // 将随机数映射到指定范围内
    let normalizedValue = map(randomNumber * randomFactor * randomFactor1, minValue, maxValue, 0.8, 1);
    // 根据映射值调整圆环大小
    let ringSize = data.maxWaveRadius * normalizedValue;

    // 向主线程发送消息，包括更新后的数据
    postMessage({
        index: i,
        smoothedNumbers: smoothedNumbersArray,
        ringSize: ringSize,
    });
};

